<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>时间转换</title>
		<style type="text/css">
			p {text-indent: 2em;}
		</style>
	</head>
	<body>
		<div>
			<h4>开发一个日期格式化插件，用于将日期以如下规则显示：</h4>
				<p>* 显示的时间与当前时间在三十秒以内，显示：刚刚</p>
				<p>* 显示的时间与当前时间在一分钟以内，显示：一分钟内</p>
				<p>* 显示的时间与当前时间在一个小时以内，显示：x 分钟前</p>
				<p>* 显示的时间与当前时间在10小时以内，显示：x 小时 x 分钟前</p>
				<p>* 显示的时间与当前时间在24小时以内，显示：今天上午 HH:mm:ss / 昨晚 HH:mm:ss / 昨天上午 HH:mm:ss ...</p>
				<p>* 显示的时间与当前时间在30天以内，显示：x 天前 HH:mm:ss</p>
				<p>* 显示的时间与当前时间在30天以上，显示：yyyy年MM月dd日 HH:mm:ss</p>
				- 经过上面的策略格式化之后的文本，为其 title 增加原始值，使鼠标 hover 时能看到原始值。
		</div>
		<script>
			window.onload = function () {
//				var T = "/Date(1506577181573)/";
				var T = "/Date(1506651956639)/";   // 后台返回的时间戳字段
//				var T = "/Date(1504160583843)/";
				function timeFormat(T) {
					var reg = /([\d]+)/;
		            var Ts = parseInt(T.split(reg)[1]);   // 列表中的时间戳
		            console.log(Ts);
		            var ts = new Date().getTime();   // 现在的时间戳
		            console.log(ts);
		            
		            var t = ts - Ts;   // 时间差
		            var just = 30*1000,   // 刚刚（30s内）
		            	min = 60*1000,   // 一分钟内（1min内）
		            	mins = 60*60*1000,   // x分钟前（1h内）
		            	hours = 10*60*60*1000,   // x小时x分钟前（10h内）
		            	day = 24*60*60*1000,   // 今天上午 HH:mm:ss / 昨晚 HH:mm:ss / 昨天上午 HH:mm:ss ...（24h内）
		            	Mon = 30*24*60*60*1000;   // x 天前 HH:mm:ss（30day内）		            	
		            
		            // 格式化时间显示
	            	var time = new Date(Ts);
		            var y = time.getFullYear();
		            var M = time.getMonth() + 1;
		            var d = time.getDate();
		            var h = time.getHours();
		            var m = time.getMinutes();
		            var s = time.getSeconds();
		            M = M < 10 ? ('0' + M) : M;
		            d = d < 10 ? ('0' + d) : d;
		            h = h < 10 ? ('0' + h) : h;
		            m = m < 10 ? ('0' + m) : m;
		            s = s < 10 ? ('0' + s) : s;
		            	
		            if (t > Mon) {   // 显示的时间与当前时间在30天以上，显示：yyyy年MM月dd日 HH:mm:ss
						return y + '-' + M + '-' + d + '  ' + h + ":" + m + ':' + s;
		            } else {
		            	if (t > day) {   // 显示的时间与当前时间在30天以内，显示：x 天前 HH:mm:ss
		            		var xd = Math.floor(t / day);
		            		return xd + '天前' + ' ' + h + ":" + m + ':' + s;
		            	} else{
		            		if (t > hours) {   // 显示的时间与当前时间在24小时以内，显示：今天上午 HH:mm:ss / 昨晚 HH:mm:ss / 昨天上午 HH:mm:ss ...
								var xh = Math.floor(t / hours);
								var isToday = h - xh;
								if (isToday) {   // 今天
									if (h < 12) {   // 今天上午
										return '今天上午' + ' ' + h + ":" + m + ':' + s;
									} else{   // 今天下午
										return '今天下午' + ' ' + h + ":" + m + ':' + s;
									}
								} else{   // 昨天
									if (h < 12) {   // 昨天上午
										return '昨天上午' + ' ' + h + ":" + m + ':' + s;
									} else{   // 昨天下午
										return '昨天上午' + ' ' + h + ":" + m + ':' + s;
									}
								}
		            		} else{
						        if (t > mins) {   // 显示的时间与当前时间在10小时以内，显示：x 小时 x 分钟前  
									var xh = Math.floor(t / mins),
										xm = t - xh * mins;   // t % mins
									return xh + '小时' + xm + '分钟前';	
		            			} else{
		            				if (t > min) {   // 显示的时间与当前时间在一个小时以内，显示：x 分钟前
										var xm = Math.floor(t / min);
		            					return xm + '分钟前';
		            				} else{
		            					if (t > just) {   // 显示的时间与当前时间在一分钟以内，显示：一分钟内
											return '1分钟内';
										} else{   // 显示的时间与当前时间在三十秒以内，显示：刚刚
											return '刚刚';
										}
		            				}
		            			}		            			
		            		}
		            	}
		            }
				}	
//				timeFormat(T);
				console.log(timeFormat(T));
			}
		</script>
	</body>
</html>
